home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 223_02 / call5.mac < prev    next >
Encoding:
Text File  |  1989-02-21  |  5.9 KB  |  332 lines

  1.  
  2. ;
  3. ;----- call5.mac   Small-C  arithmetic and logical library
  4. ;
  5. ;
  6. ;    part 5        main routine - multiply, divide, switch and
  7. ;                shift  routines in seperate modules
  8. ;
  9. CCDCAL::
  10.     PCHL
  11. CCDDGC::
  12.         DAD D
  13.         JMP CCGCHAR
  14.         ;
  15. CCDSGC::
  16.         INX H
  17.         INX H
  18.         DAD SP
  19.         ;
  20.         ;FETCH A SINGLE BYTE FROM THE ADDRESS IN HL AND
  21.         ;SIGN EXTEND INTO HL
  22.         ;
  23. CCGCHAR::       
  24.         MOV A,M
  25.         ;
  26.         ;PUT THE ACCUM INTO HL AND SIGN EXTEND THROUGH H.
  27.         ;
  28. CCARGC::
  29. CCSXT:: 
  30.         MOV L,A
  31.         RLC
  32.         SBB A
  33.         MOV H,A
  34.         RET
  35.         ;
  36. CCDDGI::
  37.         DAD D
  38.         JMP CCGINT
  39.         ;
  40. CCDSGI::
  41.         INX H
  42.         INX H
  43.         DAD SP
  44.         ;
  45.         ;FETCH A FULL 16-BIT INTEGER FROM THE ADDRESS IN HL
  46.         ;INTO HL
  47.         ;
  48. CCGINT::
  49.         MOV A,M
  50.         INX H
  51.         MOV H,M
  52.         MOV L,A
  53.         RET
  54.         ;
  55. CCDECC::
  56.         INX H
  57.         INX H
  58.         DAD SP
  59.         MOV D,H
  60.         MOV E,L
  61.         CALL CCGCHAR
  62.         DCX H
  63.         MOV A,L
  64.         STAX D
  65.         RET
  66.         ;
  67. CCINCC::
  68.         INX H
  69.         INX H
  70.         DAD SP
  71.         MOV D,H
  72.         MOV E,L
  73.         CALL CCGCHAR
  74.         INX H
  75.         MOV A,L
  76.         STAX D
  77.         RET
  78.         ;
  79.         ;
  80. ;
  81. CCDDPC::
  82. CDPDPC::
  83.         ;
  84.         DAD D
  85. CCPDPC::
  86.         POP B           ;;RET ADDR
  87.         POP D
  88.         PUSH B
  89.         ;
  90.         ;STORE A SINGLE BYTE FROM HL AT THE ADDRESS IN DE
  91.         ;
  92. CCPCHAR::       
  93. PCHAR::  MOV A,L
  94.         STAX D
  95.         RET
  96.         ;
  97. CCDECI::
  98.         INX H
  99.         INX H
  100.         DAD SP
  101.         MOV D,H
  102.         MOV E,L
  103.         CALL CCGINT
  104.         DCX H
  105.         JMP CCPINT
  106.         ;
  107. CCINCI::
  108.         INX H
  109.         INX H
  110.         DAD SP
  111.         MOV D,H
  112.         MOV E,L
  113.         CALL CCGINT
  114.         INX H
  115.         JMP CCPINT
  116.         ;
  117.         ;
  118. ;
  119. CCDDPI::
  120. CDPDPI::
  121.         ;
  122.         DAD D
  123. CCPDPI::
  124.         POP B           ;;RET ADDR
  125.         POP D
  126.         PUSH B
  127.         ;
  128.         ;STORE A 16-BIT INTEGER IN HL AT THE ADDRESS IN DE
  129.         ;
  130. CCPINT::
  131. PINT::   MOV A,L
  132.         STAX D
  133.         INX D
  134.         MOV A,H
  135.         STAX D
  136.         RET
  137.         ;
  138.         ;INCLUSIVE "OR" HL AND DE INTO HL
  139.         ;
  140. CCOR::  
  141.         MOV A,L
  142.         ORA E
  143.         MOV L,A
  144.         MOV A,H
  145.         ORA D
  146.         MOV H,A
  147.         RET
  148.         ;
  149.         ;EXCLUSIVE "OR" HL AND DE INTO HL
  150.         ;
  151. CCXOR:: 
  152.         MOV A,L
  153.         XRA E
  154.         MOV L,A
  155.         MOV A,H
  156.         XRA D
  157.         MOV H,A
  158.         RET
  159.         ;
  160.         ;"AND" HL AND DE INTO HL
  161.         ;
  162. CCAND:: 
  163.         MOV A,L
  164.         ANA E
  165.         MOV L,A
  166.         MOV A,H
  167.         ANA D
  168.         MOV H,A
  169.         RET
  170.         ;
  171.         ;IN ALL THE FOLLOWING COMPARE ROUTINES, HL IS SET TO 1 IF THE
  172.         ;CONDITION IS TRUE, OTHERWISE IT IS SET TO 0 (ZERO).
  173.         ;
  174.         ;TEST IF HL = DE
  175.         ;
  176. CCEQ::  
  177.         CALL CCCMP
  178.         RZ
  179.         DCX H
  180.         RET
  181.         ;
  182.         ;TEST IF DE <> HL
  183.         ;
  184. CCNE::  
  185.         CALL CCCMP
  186.         RNZ
  187.         DCX H
  188.         RET
  189.         ;
  190.         ;TEST IF DE > HL (SIGNED)
  191.         ;
  192. CCGT::  
  193.         XCHG
  194.         CALL CCCMP
  195.         RC
  196.         DCX H
  197.         RET
  198.         ;
  199.         ;TEST IF DE <= HL (SIGNED)
  200.         ;
  201. CCLE::  
  202.         CALL CCCMP
  203.         RZ
  204.         RC
  205.         DCX H
  206.         RET
  207.         ;
  208.         ;TEST IF DE >= HL (SIGNED)
  209.         ;
  210. CCGE::  
  211.         CALL CCCMP
  212.         RNC
  213.         DCX H
  214.         RET
  215.         ;
  216.         ;TEST IF DE < HL (SIGNED)
  217.         ;
  218. CCLT::  
  219.         CALL CCCMP
  220.         RC
  221.         DCX H
  222.         RET
  223.         ;
  224.         ;COMMON ROUTINE TO PERFORM A SIGNED COMPARE
  225.         ; OF DE AND HL
  226.         ;THIS ROUTINE PERFORMS DE - HL AND SETS THE CONDITIONS: 
  227.         ; CARRY REFLECTS SIGN OF DIFFERENCE (SET MEANS DE < HL)
  228.         ; ZERO/NON-ZERO SET ACCORDING TO EQUALITY.
  229.         ;
  230. CCCMP:: 
  231.         MOV A,H         ;;INVERT SIGN OF HL
  232.         XRI 80H
  233.         MOV H,A
  234.         MOV A,D         ;;INVERT SIGN OF DE
  235.         XRI 80H
  236.         CMP H           ;;COMPARE MSBS
  237.         JNZ CCCMP1              ;;DONE IF NEQ
  238.         MOV A,E         ;;COMPARE LSBS
  239.         CMP L
  240. CCCMP1: LXI H,1         ;;PRESET TRUE COND
  241.         RET
  242.         ;
  243.         ;TEST IF DE >= HL (UNSIGNED)
  244.         ;
  245. CCUGE:: 
  246.         CALL CCUCMP
  247.         RNC
  248.         DCX H
  249.         RET
  250.         ;
  251.         ;TEST IF DE < HL (UNSIGNED)
  252.         ;
  253. CCULT:: 
  254.         CALL CCUCMP
  255.         RC
  256.         DCX H
  257.         RET
  258.         ;
  259.         ;TEST IF DE > HL (UNSIGNED)
  260.         ;
  261. CCUGT:: 
  262.         XCHG
  263.         CALL CCUCMP
  264.         RC
  265.         DCX H
  266.         RET
  267.         ;
  268.         ;TEST IF DE <= HL (UNSIGNED)
  269.         ;
  270. CCULE:: 
  271.         CALL CCUCMP
  272.         RZ
  273.         RC
  274.         DCX H
  275.         RET
  276.         ;
  277.         ;COMMON ROUTINE TO PERFORM UNSIGNED COMPARE
  278.         ;CARRY SET IF DE < HL
  279.         ;ZERO/NONZERO SET ACCORDINGLY
  280.         ;
  281. CCUCMP::
  282.         MOV A,D
  283.         CMP H
  284.         JNZ CCUCP1
  285.         MOV A,E
  286.         CMP L
  287. CCUCP1: LXI H,1
  288.         RET
  289.         ;
  290.         ;SUBTRACT HL FROM DE AND RETURN IN HL
  291.         ;
  292. CCSUB:: 
  293.         MOV A,E
  294.         SUB L
  295.         MOV L,A
  296.         MOV A,D
  297.         SBB H
  298.         MOV H,A
  299.         RET
  300.         ;
  301.         ;FORM THE TWO'S COMPLEMENT OF HL
  302.         ;
  303. CCNEG:: 
  304.         CALL CCCOM
  305.         INX H
  306.         RET
  307.         ;
  308.         ;FORM THE ONE'S COMPLEMENT OF HL
  309.         ;
  310. CCCOM:: 
  311.         MOV A,H
  312.         CMA
  313.         MOV H,A
  314.         MOV A,L
  315.         CMA
  316.         MOV L,A
  317.         RET
  318.  
  319.  
  320. CCLNEG::
  321.         MOV A,H
  322.         ORA L
  323.         JNZ $+6
  324.         MVI L,1
  325.         RET
  326.         LXI H,0
  327.         RET
  328. ;
  329. ;
  330.      END    
  331.  
  332.